package com.baoyouqun.domain.VO;

import com.baoyouqun.domain.Enum.SystemConfigType;
import com.baoyouqun.entity.SystemConfig;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

@Data
public class PublishPostDTO {

    private String id;

    @ApiModelProperty("发布帖子配置/all/baoZhiHao/vip")
    private String publishPost;

    @ApiModelProperty("每日发布帖子上限是否启用")
    private Boolean enableLimitDay;

    @ApiModelProperty("每日发布上限")
    private Long contentLimitDay;

    @ApiModelProperty("发布帖子总额上限是否启用")
    private Boolean enableLimit;

    @ApiModelProperty("发布总额上限")
    private Long dailyLimit;

    /**
     * 从SystemConfig转换（按类型匹配）
     */
    public static PublishPostDTO fromSystemConfig(SystemConfig systemConfig) {
        if (systemConfig == null || !SystemConfigType.PUBLISH_POST.equals(systemConfig.getConfigType())) {
            throw new IllegalArgumentException("无效的发布帖子配置数据");
        }

        PublishPostDTO dto = new PublishPostDTO();

        dto.setId(systemConfig.getId());
        // String -> String
        dto.setPublishPost(systemConfig.getInfo8()); // info8是String
        // Boolean -> Boolean
        dto.setEnableLimitDay(systemConfig.getInfo1()); // info1是Boolean
        // Integer -> Integer
        dto.setContentLimitDay(systemConfig.getInfo3()); // info3是Integer
        // Boolean -> Boolean
        dto.setEnableLimit(systemConfig.getInfo2()); // info2是Boolean
        // Integer -> Integer
        dto.setDailyLimit(systemConfig.getInfo4()); // info4是Integer
        return dto;
    }

    /**
     * 转换为SystemConfig
     */
    public SystemConfig toSystemConfig(SystemConfig config) {
        config.setId(id);

        config.setConfigType(SystemConfigType.PUBLISH_POST);
        config.setConfigName(SystemConfigType.PUBLISH_POST.getDesc());

        // String类型匹配info8
        config.setInfo8(this.publishPost); // 发布配置（String → info8）

        // Boolean类型匹配info1/info2
        config.setInfo1(this.enableLimitDay); // 每日上限是否启用（Boolean → info1）
        config.setInfo2(this.enableLimit); // 总额上限是否启用（Boolean → info2）

        // Integer类型匹配info3/info4
        config.setInfo3(this.contentLimitDay); // 每日上限值（Integer → info3）
        config.setInfo4(this.dailyLimit); // 总额上限值（Integer → info4）

        return config;
    }
}